home *** CD-ROM | disk | FTP | other *** search
/ Trusted Irix /B 4.0.4 / Trusted-Irix B-4.0.1.iso / dist / eoe1.idb / usr / include / sys / IP12.h.z / IP12.h
C/C++ Source or Header  |  1992-04-03  |  25KB  |  677 lines

  1. /**************************************************************************
  2.  *                                      *
  3.  *          Copyright (C) 1990, Silicon Graphics, Inc.          *
  4.  *                                      *
  5.  *  These coded instructions, statements, and computer programs  contain  *
  6.  *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
  7.  *  are protected by Federal copyright law.  They  may  not be disclosed  *
  8.  *  to  third  parties  or copied or duplicated in any form, in whole or  *
  9.  *  in part, without the prior written consent of Silicon Graphics, Inc.  *
  10.  *                                      *
  11.  **************************************************************************/
  12.  
  13. #ident "sys/IP12.h: $Revision: 1.41 $"
  14.  
  15. /*
  16.  * IP12.h -- cpu board specific defines for IP12/HP1
  17.  */
  18.  
  19. #ifndef __SYS_IP12_H__
  20. #define __SYS_IP12_H__
  21.  
  22. /* 
  23.  * Each register is described by the following:
  24.  *
  25.  *    PIC1 | INT2 | HPC1 : register/address is located on that chip
  26.  *    w :    register is a 32 bit word
  27.  *    h :    register is a 16 bit halfword
  28.  *    b :    register is a 8 bit byte
  29.  *    ws:    address is a write strobe
  30.  *    ro:    register is read only
  31.  */
  32.  
  33. /*
  34.  *  CPU Board Control and Status Register - CPUCTRL (PIC1)
  35.  */
  36. #define CPU_CONFIG    0x1fa00000    /* Control and status register (w) */
  37.  
  38. #define CONFIG_RFE    0x0001        /* Refresh Enable */
  39. #define CONFIG_BIGEND    0x0002        /* Endianness */
  40. #define CONFIG_DBE    0x0004        /* Enable data block refill */
  41. #define CONFIG_IBE    0x0008        /* Enable instr block refill */
  42. #define CONFIG_GDE    0x0010        /* Graphics DMA complete int enable */
  43. #define CONFIG_GSE    0x0020        /* Graphics DMA sync enable */
  44. #define CONFIG_FREF    0x0040        /* Fast refresh (GIOBUS >= 33 Mhz) */
  45. #define CONFIG_DVMEBE    0x0080        /* Disable VME Bus Error */
  46. #define CONFIG_OLDFREF    0x0080        /* RFR for pre PIC1.5 (rev <= B) */
  47. #define CONFIG_GR2    0x0100        /* GR2 GIOBUS mode */
  48. #define CONFIG_INIT    0x0200        /* Drive VME SYSRESET (will reset CPU)*/
  49. #define CONFIG_ENPAR    0x0400        /* parity check on memory reads */
  50. #define CONFIG_SLAVE    0x0800        /* Allow Slave accesses to board */
  51. #define CONFIG_ARB    0x1000        /* Enable VME arbiter function */
  52. #define CONFIG_BADPAR    0x2000        /* Write bad parity */
  53. #define CONFIG_DOG    0x4000        /* Enable watchdog timeout */
  54. #define CONFIG_GRRESET    0x8000        /* Reset graphics subsystem */
  55.  
  56. #define BSR_RFE        CONFIG_RFE
  57. #define BSR_INIT    CONFIG_INIT
  58. #define BSR_ENPAR    CONFIG_ENPAR
  59. #define BSR_SLAVE    CONFIG_SLAVE
  60. #define BSR_ARB        CONFIG_ARB
  61. #define BSR_BADPAR    CONFIG_BADPAR
  62. #define BSR_DOG        CONFIG_DOG
  63.  
  64. /* 
  65.  *  System Mode Register - RSTCONFIG (PIC1)
  66.  */
  67. #define SYS_MODE    0x1fa00004    /* System Mode register (w,ro) */
  68.  
  69. #define MODE_DBSIZE    0x03        /* Data block size */
  70. #define MODE_IBSIZE    0x0c        /* Instruction block size */
  71. #define MODE_ISTRM    0x10        /* Instruction streaming enabled */
  72. #define MODE_NCSH    0x20        /* No cache mode */
  73. #define MODE_STP    0x40        /* Store Partial Enabled */
  74. #define MODE_BDRV    0x80        /* Bus Drive ON */
  75.  
  76. /* 
  77.  * System ID / Coprocessor Present Reg - SYSID
  78.  */
  79. #define SYSID        0x1fa00008    /* SYSID PROM address (w,ro) */
  80.  
  81. #define    SID_FPPRES    0x01        /* FP coprocessor present */
  82. #define    SID_GDMAERR    0x04        /* error in graphics DMA */
  83. #define SID_GDMARDY    0x08        /* asserted at end of graphics DMA */
  84. #define SID_VMERMW    0x20        /* asserted in vme read-mod-write */
  85. #define SID_REV0    0x40        /* bit 0 of PIC Chip revision */
  86. #define SID_REV1    0x80        /* bit 1 of PIC Chip revision */
  87. #define SID_REV2    0x100        /* bit 2 of PIC Chip revision */
  88. #define SID_REV        (SID_REV2 | SID_REV1 | SID_REV0)
  89. #define SID_REV_SHIFT    6
  90.  
  91. /*
  92.  * Memory configuration registers - MEMCFG (PIC1)
  93.  */
  94. #define MEM_CONF_ADDR0    0x1fa10000    /* memory config register 0 (w) */
  95. #define MEM_CONF_ADDR1    0x1fa10004    /* memory config register 1 (w) */
  96.  
  97. #define MCF_4MRAM    0x0        /* 4 MB of RAM */
  98. #define MCF_8MRAM    0x1        /* 8 MB of RAM */
  99. #define MCF_16MRAM    0x3        /* 16 MB of RAM */
  100. #define MCF_32MRAM    0x7        /* 32 MB of RAM */
  101. #define MCF_64MRAM    0xf        /* 64 MB of RAM */
  102.  
  103. #define MCF_BADSIZE    0x0        /* size if RAM module is bad */
  104. #define MCF_BADADDR    0x3f        /* address if RAM module is bad */
  105. #define MCF_BADCONF    \
  106.     ((MCF_BADSIZE << 8) | MCF_BADADDR)  /* config word for bad module */
  107.  
  108. /*
  109.  * refresh timer - REFTIM (PIC1) 
  110.  */
  111. #define WRITEONLY_REFRESH_TIMER    0x1fa10100    /* timer (w, wo) */
  112.  
  113. /* 
  114.  * Memory Parity Error registers  (PIC1)
  115.  */
  116. #define PAR_ERR_ADDR    0x1fa10200    /* Parity error register (w,ro) */
  117.  
  118. #define PAR_GDMA    0x01        /* Graphics DMA parity error */
  119. #define PAR_DMA        0x02        /* DMA generated parity error */
  120. #define PAR_CPU        0x04        /* CPU generated parity error */
  121. #define PAR_VME        0x08        /* VME generated parity error */
  122. #define PAR_B3        0x10        /* Parity error in byte 3 */
  123. #define PAR_B2        0x20        /* Parity error in byte 2 */
  124. #define PAR_B1        0x40        /* Parity error in byte 1 */
  125. #define PAR_B0        0x80        /* Parity error in byte 0 */
  126. #define PAR_ERR_MASK    0xff        /* Mask for parity error bits */
  127.  
  128. #define PAR_CL_ADDR    0x1fa10210    /* Clear parity err (ws) */
  129.  
  130. #define CPU_PAR_ADDR    0x1fa10204    /* CPU Parity error address (w,ro) */
  131. #define DMA_PAR_ADDR     0x1fa10208    /* DMA Slave Parity err addr (w,ro) */
  132.  
  133. /* 
  134.  * GIO Bus config (PIC1)
  135.  */
  136. #define GIO_SLOT0_ADDR    0x1fa20000    /* Slot 0 config register (w) */
  137. #define GIO_SLOT1_ADDR    0x1fa20004    /* Slot 1 config register (w) */
  138. #define GIO_BURST_ADDR    0x1fa20008    /* Arbiter Burst register (w) */
  139. #define GIO_DELAY_ADDR    0x1fa2000c    /* Arbiter Delay register (w) */
  140.  
  141. /* Flags for setgioconfig() */
  142. #define GIO_CONFIG_SLAVE    0x01    /* Configure slot as slave only */
  143. #define GIO_CONFIG_LONG        0x02    /* Device is a long burst device */
  144.  
  145. /* GIO Bus DMA burst & delay periods = ~(register_value) * 150ns */
  146. #define GDMA_BURST_DEFAULT    0x01    /* burst period = 38.4us */
  147. #define GDMA_DELAY_DEFAULT    0xf2    /* bus grant period = 2us */
  148.  
  149. /* 
  150.  * Three-way transfer
  151.  */
  152. #define TW_TRIG_ADDR    0x1fa70000    /* 3-way Transfer trigger data (w) */
  153. #define TW_STATUS_ADDR    0x1fa80000    /* 3-way Status (w,ro) */
  154. #define TW_START_ADDR     0x1fa80004    /* 3-way Transfer start addr (w, ro) */
  155. #define TW_MASK_ADDR     0x1fa80008    /* 3-way Transfer address mask (w) */
  156. #define TW_SUBS_ADDR     0x1fa8000c    /* 3-way Transfer addr substitute (w) */
  157.  
  158. #define TW_ARM        0x80000000    /* Arm 3-way transfer, active hi */
  159. #define TW_STVALID    0x20000000    /* 3-way, indicate start addr valid */
  160.  
  161. /* 
  162.  * Graphics Channel registers and register bits  (PIC1)
  163.  */
  164. #define    GDMA_DABR_PHYS     0x1faa0000    /* Descriptor array base reg (w) */
  165. #define    GDMA_BUFADR_PHYS 0x1faa0004    /* Buffer Address reg (w,ro) */
  166. #define    GDMA_BUFLEN_PHYS 0x1faa0008    /* Buffer Length reg (w,ro) */
  167. #define    GDMA_DEST_PHYS     0x1faa000c    /* Graphics operand address (w,ro) */
  168. #define    GDMA_STRIDE_PHYS 0x1faa0010    /* Stride/line count (w,ro) */
  169. #define    GDMA_NEXTDESC      0x1faa0014    /* Next descriptor pointer (w,ro) */
  170. #define    GDMA_START_PHYS     0x1faa0100    /* Start graphics DMA (ws) */
  171.  
  172. /* These bits are in GDMA_BUFLEN_PHYS reg above */
  173. #define GDMA_MODE_MASK    0x3000        /* DMA mode bits */
  174. #define GDMA_HTOG    0x0000        /* DMA Mode: 0 = Host to Gfx */
  175. #define GDMA_GTOH    0x2000        /* DMA Mode: 1 = Gfx to Host */
  176. #define GDMA_ACCUM    0x1000        /* DMA Mode: Accumulation DMA */
  177. #define GDMA_LINC    0x4000        /* Line increment enable */
  178. #define GDMA_LAST    0x8000        /* Marks last desc array entry */
  179. #define GDMA_FULLPG     0x40000000      /* Full page (4k) DMA */
  180. #define GDMA_SINC    0x80000000    /* Stride increment enable */
  181.  
  182. /* 
  183.  * Local I/O Interrupt Status Register  (INT2)
  184.  */
  185. #ifdef    _MIPSEB
  186. #define LIO_0_ISR_ADDR    0x1fb801c3    /* Local IO interrupt status (b,ro) */
  187. #define LIO_1_ISR_ADDR    0x1fb801cb    /* Local IO interrupt status (b,ro) */
  188. #else    /* _MIPSEL */
  189. #define LIO_0_ISR_ADDR    0x1fb801c0    /* Local IO interrupt status (b,ro) */
  190. #define LIO_1_ISR_ADDR    0x1fb801c8    /* Local IO interrupt status (b,ro) */
  191. #endif    /* _MIPSEL */
  192.  
  193. /* LIO 0 status bits */
  194. #define LIO_FIFO    0x01        /* FIFO full / GIO-0  interrupt */
  195. #define LIO_GIO_0    0x01
  196. #define LIO_CENTR    0x02        /* Centronics Printer Interrupt */
  197. #define LIO_SCSI    0x04        /* SCSI interrupt */
  198. #define LIO_ENET    0x08        /* Ethernet interrupt */
  199. #define LIO_GDMA    0x10        /* Graphics dma done interrupt */
  200. #define LIO_DUART    0x20        /* Duart interrupts (OR'd) */
  201. #define LIO_GE        0x40        /* GE/GIO-1/second HPC1 interrupt */
  202. #define LIO_GIO_1    0x40
  203. #define LIO_VME0    0x80        /* VME-0 interrupt */
  204.  
  205. /* LIO 1 status bits */
  206. #define LIO_BIT0_UNUSED    0x01
  207. #define LIO_GR1MODE    0x02        /* GR1 Mode(IP12)/Case Interlock(HP1) */
  208. #define LIO_BIT2_UNUSED    0x04
  209. #define LIO_VME1    0x08        /* VME-1 interrupt */
  210. #define LIO_DSP        0x10        /* DSP interrupt */
  211. #define LIO_AC        0x20        /* ACFAIL interrupt */
  212. #define LIO_VIDEO    0x40        /* Video option interrupt */
  213. #define LIO_VR        0x80        /* Vert retrace / GIO-2 interrupt */
  214. #define LIO_GIO_2    0x80
  215.  
  216. /* 
  217.  * Local I/O Interrupt Mask Register  (INT2)
  218.  */
  219. #ifdef    _MIPSEB
  220. #define LIO_0_MASK_ADDR    0x1fb801c7    /* Local IO register 0 mask (b) */
  221. #define LIO_1_MASK_ADDR    0x1fb801cf    /* Local IO register 1 mask (b) */
  222. #else    /* _MIPSEL */
  223. #define LIO_0_MASK_ADDR    0x1fb801c4    /* Local IO register 0 mask (b) */
  224. #define LIO_1_MASK_ADDR    0x1fb801cc    /* Local IO register 1 mask (b) */
  225. #endif    /* _MIPSEL */
  226.  
  227. /* LIO 0 mask bits */
  228. #define LIO_FIFO_MASK        0x01    /* FIFO full/GIO-0 interrupt mask */
  229. #define LIO_CENTR_MASK        0x02    /* Centronics Printer Interrupt mask */
  230. #define LIO_SCSI_MASK        0x04    /* SCSI interrupt mask */
  231. #define LIO_ENET_MASK        0x08    /* Ethernet interrupt mask */
  232. #define LIO_GDMA_MASK        0x10    /* Graphics DMA interrupt mask */
  233. #define LIO_DUART_MASK        0x20    /* Duart interrupts mask*/
  234. #define LIO_GE_MASK        0x40    /* GE/GIO-1 interrupt mask */
  235. #define LIO_VME0_MASK        0x80    /* VME-0 interrupt mask */
  236.  
  237. /* LIO 1 mask bits */
  238. #define LIO_MASK_BIT0_UNUSED    0x01
  239. #define LIO_MASK_BIT1_UNUSED    0x02
  240. #define LIO_MASK_BIT2_UNUSED    0x04
  241. #define LIO_VME1_MASK        0x08    /* VME-1 interrupt */
  242. #define LIO_DSP_MASK        0x10    /* DSP interrupt */
  243. #define LIO_AC_MASK        0x20    /* AC fail interrupt */
  244. #define LIO_VIDEO_MASK        0x40    /* Video option interrupt */
  245. #define LIO_VR_MASK        0x80    /* Vert retrace/GIO-2 interrupt */
  246.  
  247. /* Local I/O vector numbers for setlclvector() (local 1 starts at 8) */
  248. #define VECTOR_GIO0        0
  249. #define VECTOR_PLP        1
  250. #define VECTOR_SCSI        2
  251. #define VECTOR_ENET        3
  252. #define VECTOR_GDMA        4
  253. #define VECTOR_DUART        5
  254. #define VECTOR_GIO1        6
  255. #define VECTOR_VME0        7
  256. #define VECTOR_ILOCK        9
  257. #define VECTOR_VME1        11
  258. #define VECTOR_DSP        12
  259. #define VECTOR_ACFAIL        13
  260. #define VECTOR_VIDEO        14
  261. #define VECTOR_GIO2        15
  262.  
  263. /* GIO Interrupts */
  264. #define GIO_INTERRUPT_0        0
  265. #define GIO_INTERRUPT_1        1
  266. #define GIO_INTERRUPT_2        2
  267.  
  268. /* GIO Slots */
  269. #define GIO_SLOT_0        0
  270. #define GIO_SLOT_1        1
  271. #define GIO_SLOT_GFX        2
  272.  
  273. /* Serial Port Configuration/LEDs
  274.  *
  275.  * On the HP1 board, the PORT_CONFIG register controls the configuration
  276.  * of the serial ports and ethernet.  On IP12 it controls the LEDs.
  277.  */
  278. #ifdef    _MIPSEB
  279. #define    PORT_CONFIG    0x1fb801df    /* LEDs/serial port config (5 bits) */
  280. #else    /* _MIPSEL */
  281. #define    PORT_CONFIG    0x1fb801dc    /* LEDs/serial port config (5 bits) */
  282. #endif    /* _MIPSEL */
  283.  
  284. #define PCON_PARITY    0x01        /* IP12 cache parity error */
  285. #define PCON_SERTCLK    0x01        /* External clock on for HP1 port 0 */
  286. #define PCON_SER0RTS    0x02        /* RTS/TX+ for HP1 port 0 (RTS=1) */
  287. #define PCON_SER1RTS    0x04        /* RTS/TX+ for HP1 port 1 (RTS=1) */
  288. #define PCON_CLEARVRI    0x08        /* Disable/enable vert. retrace intr. */
  289. #define PCON_POWER    0x10        /* Power off */
  290.  
  291. #define    LED_MASK    0x0e        /* led bits (3) */
  292. #define    LED_HEART    0x02        /* 1 HZ Heartbeat */
  293. #define LED_IDLE    0x04        /* off when cpu is idle */
  294. #define LED_GFX        0x08
  295.  
  296. /* 
  297.  * Clock and timer  (INT2)
  298.  */
  299. #define    PT_CLOCK_ADDR    PHYS_TO_K1(0x1fb801f0)    /* 8254 timer */
  300. #ifdef    _MIPSEB
  301. #define    TIMER_ACK_ADDR    PHYS_TO_K1(0x1fb801e3)    /* clear timer 2 bits (ws) */
  302. #else    /* _MIPSEL */
  303. #define    TIMER_ACK_ADDR    PHYS_TO_K1(0x1fb801e0)    /* clear timer 2 bits (ws) */
  304. #endif    /* _MIPSEL */
  305.  
  306. #define ACK_TIMER0    0x1    /* write strobe to clear timer 0 */
  307. #define ACK_TIMER1    0x2    /* write strobe to clear timer 1 */
  308.  
  309. /*
  310.  * HPC ID register
  311.  */
  312. #define HPC_0_ID_ADDR    0x1fb80000    /* HPC 0 exists (primary HPC) */
  313. #define HPC_1_ID_ADDR    0x1fb00000    /* HPC 1 exists */
  314. #define HPC_2_ID_ADDR    0x1f980000    /* HPC 2 exists */
  315. #define HPC_3_ID_ADDR    0x1f900000    /* HPC 3 exists */
  316.  
  317. /* 
  318.  * Ethernet control (HPC1) - see bsd/misc/seeq.h
  319.  */
  320.  
  321. /* 
  322.  * SCSI Control (on HPC 0).  Always present.
  323.  */
  324. #define SCSI0_BC_ADDR    0x1fb80088    /* SCSI byte count register */
  325. #define SCSI0_CBP_ADDR    0x1fb8008c    /* SCSI current buffer pointer */
  326. #define SCSI0_NBDP_ADDR    0x1fb80090    /* SCSI next buffer pointer */
  327. #define SCSI0_CTRL_ADDR    0x1fb80094    /* SCSI control register */
  328.  
  329. /* wc33c93 chip registers accessed through HPC1 */
  330. #ifdef    _MIPSEB
  331. #define SCSI0A_ADDR    0x1fb80122    /* SCSI WD33C93 address register (b) */
  332. #define SCSI0D_ADDR    0x1fb80126    /* SCSI WD33C93 data register (b) */
  333. #else    /* _MIPSEL */
  334. #define SCSI0A_ADDR    0x1fb80121    /* SCSI WD33C93 address register (b) */
  335. #define SCSI0D_ADDR    0x1fb80125    /* SCSI WD33C93 data register (b) */
  336. #endif    /* _MIPSEL */
  337.  
  338. /* HPC1 registers for SCSI fifo */
  339. #define SCSI0_PNTR_ADDR    0x1fb80098    /* SCSI pointer register */
  340. #define SCSI0_FIFO_ADDR    0x1fb8009c    /* SCSI fifo data register */
  341.  
  342. /* 
  343.  * 2nd SCSI Control (on HPC 1).  May not be present.
  344.  */
  345. #define SCSI1_BC_ADDR    0x1fb00088    /* SCSI byte count register */
  346. #define SCSI1_CBP_ADDR    0x1fb0008c    /* SCSI current buffer pointer */
  347. #define SCSI1_NBDP_ADDR    0x1fb00090    /* SCSI next buffer pointer */
  348. #define SCSI1_CTRL_ADDR    0x1fb00094    /* SCSI control register */
  349.  
  350. /* wc33c93 chip registers accessed through HPC1 */
  351. #ifdef    _MIPSEB
  352. #define SCSI1A_ADDR    0x1fb00122    /* SCSI WD33C93 address register (b) */
  353. #define SCSI1D_ADDR    0x1fb00126    /* SCSI WD33C93 data register (b) */
  354. #else    /* _MIPSEL */
  355. #define SCSI1A_ADDR    0x1fb00121    /* SCSI WD33C93 address register (b) */
  356. #define SCSI1D_ADDR    0x1fb00125    /* SCSI WD33C93 data register (b) */
  357. #endif    /* _MIPSEL */
  358.  
  359. /* HPC1 registers for SCSI fifo */
  360. #define SCSI1_PNTR_ADDR    0x1fb00098    /* SCSI pointer register */
  361. #define SCSI1_FIFO_ADDR    0x1fb0009c    /* SCSI fifo data register */
  362.  
  363.  
  364. #define SCSI_RESET    0x01        /* reset WD33C93 chip */
  365. #define SCSI_FLUSH    0x02        /* flush SCSI buffers */
  366. #define SCSI_TO_MEM    0x10        /* transfer in */
  367. #define SCSI_STARTDMA    0x80        /* start SCSI dma transfer */
  368.  
  369. /* 
  370.  * Parallel control (HPC1)
  371.  */
  372. #define PAR_OFFSET    0xa8        /* offset to par regs from HPC1 */
  373. #define PAR_BC_ADDR    0x1fb800a8    /* parallel byte count and IE (w) */
  374. #define PAR_CBP_ADDR    0x1fb800ac    /* parallel current buf ptr (w) */
  375. #define PAR_NBDP_ADDR    0x1fb800b0    /* parallel next buf desc (w) */
  376. #define PAR_CTRL_ADDR    0x1fb800b4    /* parallel control reg (w) */
  377. #ifdef    _MIPSEB
  378. #define PAR_SR_ADDR    0x1fb80135    /* parallel status/remote reg (b) */
  379. #else    /* _MIPSEL */
  380. #define PAR_SR_ADDR    0x1fb80136    /* parallel status/remote reg (b) */
  381. #endif    /* _MIPSEL */
  382.  
  383. /* parallel control register bits */
  384. #define PAR_CTRL_RESET        0x01    /* reset parallel port */
  385. #define PAR_CTRL_INT          0x02    /* interrupt pending */
  386. #define PAR_CTRL_CLRINT        0x02    /* clear pending interrupt */
  387. #define PAR_CTRL_POLARITY    0x04    /* strobe polarity */
  388. #define PAR_CTRL_SOFTACK    0x08    /* soft acknowledge */
  389. #define PAR_CTRL_PPTOMEM    0x10    /* dma parallel port to mem */
  390. #define PAR_CTRL_MEMTOPP    0x00    /* dma mem to parallel port */
  391. #define PAR_CTRL_IGNACK        0x20    /* ignore ack input */
  392. #define PAR_CTRL_FLUSH        0x40    /* flush HPC PP buffers */
  393. #define PAR_CTRL_STRTDMA    0x80    /* start dma */
  394.  
  395. #define PAR_STROBE_MIN_MASK    0x7f000000  /* mask for strobe duty cycle */
  396. #define PAR_STROBE_LEAD_MASK    0x007f0000  /* mask for strobe lead edge */
  397. #define PAR_STROBE_TRAIL_MASK    0x00007f00  /* mask for strobe tailing edge */
  398. #define PAR_STROBE_MASK        0x7f7f7f00  /* mask for strobe */
  399.  
  400. /*
  401.  * DUART Registers (accessed through HPC1)
  402.  */
  403. #ifdef    _MIPSEB
  404. #define DUART0  (0x1fb80d03 + K1BASE)
  405. #define DUART1  (0x1fb80d13 + K1BASE)
  406. #define DUART2  (0x1fb80d23 + K1BASE)
  407. #define DUART3  (0x1fb80d33 + K1BASE)
  408. #else    /* _MIPSEL */
  409. #define DUART0  (0x1fb80d00 + K1BASE)
  410. #define DUART1  (0x1fb80d10 + K1BASE)
  411. #define DUART2  (0x1fb80d20 + K1BASE)
  412. #define DUART3  (0x1fb80d30 + K1BASE)
  413. #endif    /* _MIPSEL */
  414.  
  415. #define CHNA_DATA_OFFSET        0xc
  416. #define CHNA_CNTRL_OFFSET       0x8
  417. #define CHNB_DATA_OFFSET        0x4
  418. #define CHNB_CNTRL_OFFSET       0x0
  419.  
  420. #define DUART0A_DATA    (DUART0 + CHNA_DATA_OFFSET)
  421. #define DUART0B_DATA    (DUART0 + CHNB_DATA_OFFSET)
  422. #define DUART1A_DATA    (DUART1 + CHNA_DATA_OFFSET)
  423. #define DUART1B_DATA    (DUART1 + CHNB_DATA_OFFSET)
  424. #define DUART2A_DATA    (DUART2 + CHNA_DATA_OFFSET)
  425. #define DUART2B_DATA    (DUART2 + CHNB_DATA_OFFSET)
  426.  
  427. #define DUART0A_CNTRL   (DUART0 + CHNA_CNTRL_OFFSET)
  428. #define DUART0B_CNTRL   (DUART0 + CHNB_CNTRL_OFFSET)
  429. #define DUART1A_CNTRL   (DUART1 + CHNA_CNTRL_OFFSET)
  430. #define DUART1B_CNTRL   (DUART1 + CHNB_CNTRL_OFFSET)
  431. #define DUART2A_CNTRL   (DUART2 + CHNA_CNTRL_OFFSET)
  432. #define DUART2B_CNTRL   (DUART2 + CHNB_CNTRL_OFFSET)
  433.  
  434. /*
  435.  * Board revision register - modem SRAM memory space
  436.  */
  437. #define BOARD_REV_ADDR    0x1fbd0000
  438. #define REV_HP1        0x8000
  439. #define REV_MASK    0x7000
  440. #define REV_SHIFT    12
  441.  
  442. /*
  443.  * Headphone Gain MDACS (accessed like they're DUART3)
  444.  */
  445. #define HEADPHONE_MDAC_L    (DUART3 + CHNB_CNTRL_OFFSET)
  446. #define HEADPHONE_MDAC_R    (DUART3 + CHNB_DATA_OFFSET)
  447.  
  448. /* 
  449.  * Battery backup (real time) clock (accessed through HPC1)
  450.  */
  451. #ifdef LANGUAGE_C
  452. #define RT_CLOCK_ADDR    (struct dp8573_clk *)PHYS_TO_K1(0x1fb80e00)
  453. #else 
  454. #define RT_CLOCK_ADDR    PHYS_TO_K1(0x1fb80e00)
  455. #endif
  456.  
  457. /* 
  458.  * CPU aux control register  (HPC1)
  459.  */
  460. #ifdef    _MIPSEB
  461. #define    CPU_AUX_CONTROL    0x1fb801bf    /* Serial ctrl and LED (b) */
  462. #else    /* _MIPSEL */
  463. #define    CPU_AUX_CONTROL    0x1fb801bc    /* Serial ctrl and LED (b) */
  464. #endif    /* _MIPSEL */
  465.  
  466. #define SER_TO_CPU    0x10        /* Data from serial memory */
  467. #define CPU_TO_SER    0x08        /* Data to serial memory */
  468. #define SERCLK        0x04        /* Serial Clock */
  469. #define    CONSOLE_CS    0x02        /* EEPROM (nvram) chip select */
  470. #define    CONSOLE_LED    0x01        /* Console led */
  471. #define    NVRAM_PRE    0x01        /* EEPROM (nvram) PRE pin signal */
  472.  
  473. /* Locations of HDSP-HPC1 registers in the MIPS address space. */
  474. #define HPC1DMAWDCNT    0x1fb80180    /* DMA transfer size (SRAM words) */
  475. #define HPC1GIOADDL    0x1fb80184    /* GIO-bus address, LSB (16 bit) */
  476. #define HPC1GIOADDM    0x1fb80188    /* GIO-bus address, MSB (16 bit) */
  477. #define HPC1PBUSADD    0x1fb8018c    /* PBUS address (16 bit) */
  478. #define HPC1DMACTRL    0x1fb80190    /* DMA Control (2 bit) */
  479. #define HPC1COUNTER    0x1fb80194    /* Counter (24 bits) (ro) */
  480. #define HPC1HANDTX    0x1fb80198    /* Handshake transmit (16 bit) */
  481. #define HPC1HANDRX    0x1fb8019c    /* Handshake receive (16 bit) */
  482. #define HPC1CINTSTAT    0x1fb801a0    /* CPU Interrupt status (3 bit) */
  483. #define HPC1CINTMASK    0x1fb801a4    /* CPU Interrupt masks (3 bit) */
  484. #define HPC1MISCSR    0x1fb801b0    /* Misc. control and status (8 bit) */
  485. #define HPC1BURSTCTL    0x1fb801b4    /* DMA Ballistics register (16 bit)*/
  486.  
  487. /* Bits in HPC1DMACTRL */
  488. #define HPC1DMA_GO    0x1        /* start dma */
  489. #define HPC1DMA_DIR    0x2        /* direction: 0 = MIPS->DSP */
  490. #define HPC1DMA_MODE    0x4        /* mode: 0 = normal, 1 = folded */
  491.  
  492. /* Bits in HPC1CINTSTAT */
  493. #define HPC1CINT_DMA    0x1        /* end of dma */
  494. #define HPC1CINT_TX    0x2        /* dsp has written to HANDTX */
  495. #define HPC1CINT_RX    0x4        /* dsp has read HANDRX */
  496.  
  497. /* Bits in HPC1MISCSR */
  498. #define HPC1MISC_RESET    0x1        /* force hard reset to DSP */
  499. #define HPC1MISC_IRQA    0x2        /* force /IRQA with polarity below */
  500. #define HPC1MISC_POL    0x4        /* polarity of IRQA (1 = high) */
  501. #define HPC1MISC_32K    0x8        /* SRAM size (1=32K, 0=8K) */
  502. /* Sign extension mode bits in HPC1MISCSR */
  503. #define HPC1MISC_8TO32    0x70        /* PBus 8 -> GIO 32 signed */
  504. #define HPC1MISC_16TO32    0x60        /* PBus 16 -> GIO 32 signed */
  505. #define HPC1MISC_24TO32 0x40        /* PBus 24 -> GIO 32 signed */
  506. #define HPC1MISC_NOSIGN 0x0        /* no sign extension */
  507. /* 
  508.  * DSP RAM access (accessed through HPC1)
  509.  */
  510. #define HPC1MEMORY    0x1fbe0000    /* DSP Memory 24 bits x 32k */
  511.  
  512. /*
  513.  * VMEbus related defines
  514.  */
  515.  
  516. /* 
  517.  * VME control (PIC1)
  518.  */
  519. /* Cause a read/modify/write cycle to occur with the next read and write */
  520. #define    VME_RMW_ADDR    PHYS_TO_K1(0x1fa90000)    /* VME RMW toggle (ws) */
  521.  
  522. /*
  523.  * VME interrupt control registers (INT2)
  524.  */
  525. /* VME Interrupt Status/Mask Registers */
  526. #ifdef    _MIPSEB
  527. #define VME_ISR_ADDR    0x1fb801d3    /* VME interrupt status (b, ro) */
  528. #define VME_ISR        VME_ISR_ADDR    /* VME interrupt status (b) */
  529. #define VME_0_MASK_ADDR    0x1fb801d7    /* VME interrupt mask for LIO 0 (b) */
  530. #define VME_1_MASK_ADDR    0x1fb801db    /* VME interrupt mask for LIO 1 (b) */
  531. #else    /* _MIPSEL */
  532. #define VME_ISR_ADDR    0x1fb801d0    /* VME interrupt status (b, ro) */
  533. #define VME_ISR        VME_ISR_ADDR    /* VME interrupt status (b) */
  534. #define VME_0_MASK_ADDR    0x1fb801d4    /* VME interrupt mask for LIO 0 (b) */
  535. #define VME_1_MASK_ADDR    0x1fb801d8    /* VME interrupt mask for LIO 1 (b) */
  536. #endif    /* _MIPSEL */
  537.  
  538. /*
  539.  * VME I/O space defines (addresses mapped by PIC1)
  540.  */
  541. #define VME_IACK    0x1df00000    /* VME interrupt acknowledge sp */
  542.  
  543. #define    VME_A16NPBASE    0x1d100000    /* a16 non-privileged address sp */
  544. #define VME_A16NPSIZE    0x00010000    /* size */
  545.  
  546. #define    VME_A16SBASE    0x1d000000    /* a16 supervisor address sp */
  547. #define VME_A16SSIZE    0x00010000    /* size */
  548.  
  549. #define    VME_A24NPBASE    0x1e000000    /* a24 non-privileged address sp */
  550. #define VME_A24NPSIZE    0x01000000    /* size */
  551.  
  552. #define    VME_A24SBASE    0x1c000000    /* a24 supervisor address sp */
  553. #define VME_A24SSIZE    0x01000000    /* size */
  554.  
  555.                     /* 0x1 forced as high nibble     */
  556. #define    VME_A32NPBASE    0x10000000    /* a32 non-privileged address sp */
  557. #define VME_A32NPSIZE    0x0c000000    /* size */
  558.  
  559. /* address spaces at 0x20000000 and 0x30000000 not currently supported */
  560. #define    VME_A32SBASE    0        /* a32 supervisor address sp */
  561. #define VME_A32SSIZE    0        /* size */
  562.  
  563. #define vme_adapter(addr) 0        /* only 1 VME adapter */
  564.  
  565. /*
  566.  * miscellaneous 
  567.  */
  568.  
  569. /* 
  570.  * Vertical retrace status (INT2)
  571.  */
  572. #define VRSTAT_ADDR    VME_ISR_ADDR    /* VR status read from vme reg */
  573. #define VRSTAT_MASK    0x01        /* Vert retrace status: no interrupt */
  574.  
  575. #ifdef LANGUAGE_C
  576.  
  577. /*
  578.  * Graphics DMA channel descriptor array element.
  579.  */
  580. typedef struct gdmada {
  581.     long *bufaddr;
  582.     long dmactl;
  583.     long grxaddr;
  584. #ifdef    _MIPSEB
  585.     unsigned short stride; 
  586.     unsigned short linecount; 
  587. #else    /* _MIPSEL */
  588.     unsigned short linecount; 
  589.     unsigned short stride; 
  590. #endif    /* _MIPSEL */
  591.     long *nextdesc; 
  592. } gdmada_t;
  593.  
  594. /* chip interface structure for IP12 / HPC / WD33C93 */
  595. typedef struct scuzzy {
  596.     volatile unsigned char    *d_addr;    /* address register */
  597.     volatile unsigned char    *d_data;    /* data register */
  598.     volatile unsigned long    *d_ctrl;    /* control address */
  599.     volatile unsigned long    *d_bcnt;    /* byte count register */
  600.     volatile unsigned long    *d_curbp;    /* current buffer pointer */
  601.     volatile unsigned long    *d_nextbp;    /* next buffer pointer */
  602.     volatile unsigned long    *d_pntr;    /* fifo pointer register */
  603.     volatile unsigned long    *d_fifo;    /* fifo data register */
  604.     unsigned char d_initflags;    /* initial flags for d_flags */
  605.     unsigned char d_clock;    /* value for clock register on WD chip */
  606. } scuzzy_t;
  607.  
  608. /* descriptor structure for IP12 SCSI / HPC interface */
  609. #ifdef    _MIPSEB
  610. typedef struct scsi_descr {
  611.     unsigned fill:19, bcnt:13;
  612.     unsigned eox:1, efill:3, cbp:28;
  613.     unsigned nfill:4, nbp:28;
  614. } scdescr_t;
  615. #else    /* _MIPSEL */
  616. typedef struct scsi_descr {
  617.     unsigned bcnt:13, fill:19;
  618.     unsigned cbp:28, efill:3, eox:1;
  619.     unsigned nbp:28, nfill:4;
  620. } scdescr_t;
  621. #endif    /* _MIPSEL */
  622.  
  623.  
  624. #define NSCSI_DMA_PGS 64    /* map up to 256Kb per transfer.  This is sufficient
  625.     for almost all disk and tape acesses.  Things like scanners or
  626.     printers often transfer far more than a Mb per cmd, so they will
  627.     have to re-map anyway, no matter how many we allocate */
  628.  
  629.  
  630. /* this saves a lot of hard to read and type code in various places,
  631.     and also ensures that we get the register size correct */
  632. #define K1_LIO_0_MASK_ADDR ((volatile unchar *)PHYS_TO_K1(LIO_0_MASK_ADDR))
  633. #define K1_LIO_1_MASK_ADDR ((volatile unchar *)PHYS_TO_K1(LIO_1_MASK_ADDR))
  634. #define K1_LIO_0_ISR_ADDR ((volatile unchar *)PHYS_TO_K1(LIO_0_ISR_ADDR))
  635. #define K1_LIO_1_ISR_ADDR ((volatile unchar *)PHYS_TO_K1(LIO_1_ISR_ADDR))
  636. #define K1_CPU_CONFIG ((volatile uint *)PHYS_TO_K1(CPU_CONFIG))
  637. #define K1_VME_ISR_ADDR ((volatile unchar *)PHYS_TO_K1(VME_ISR_ADDR))
  638. #define K1_VME_0_MASK_ADDR ((volatile unchar *)PHYS_TO_K1(VME_0_MASK_ADDR))
  639. #define K1_VME_1_MASK_ADDR ((volatile unchar *)PHYS_TO_K1(VME_1_MASK_ADDR))
  640.  
  641. /* function prototypes for IP12 functions */
  642.  
  643. extern int spllintr(void);
  644. extern int splhintr(void);
  645. extern int splretr(void);
  646.  
  647. extern void setlclvector(int, void (*)(int,struct eframe_s *), int);
  648. extern void setgiovector(int, int, void (*)(int), int);
  649. extern void setgioconfig(int, int);
  650.  
  651. #endif /* LANGUAGE_C */
  652.  
  653. #if defined(STANDALONE) || defined(PROM) || defined(LOCORE)
  654. #include <sys/IP12nvram.h>
  655. #endif /* STANDALONE */
  656.  
  657. /* Address definitions - see IP12addrs.h for full map */
  658. #define    SYMMON_STACK        PHYS_TO_K0(0x3000)
  659. #define    PROM_STACK        PHYS_TO_K1(0x400000)
  660. #define PROM_CHILD_STACK    PHYS_TO_K0(0x37fffc)/*SASH's stack is 16k max.*/
  661. #define    RESTART_ADDR        PHYS_TO_K0(0x400)
  662.  
  663. /* Size definitions */
  664. #define SYMMON_PDASIZE        512    /* size per CPU */
  665.  
  666. /* 
  667.  * Dummy write to an non-graphics location to give PIC a chance to
  668.  * arbitrate the bus.  This is a workaround for the PIC1B back-to-back
  669.  * write bug in GR1 mode (initial Magnums).
  670.  */
  671. #define PICFIX  {volatile int dummy = 0;}
  672.  
  673. #define    dcache_wb(X,Y)
  674. #define    dcache_wbinval(X,Y)    dcache_inval(X,Y)
  675.  
  676. #endif /* __SYS_IP12_H__ */
  677.